Fail2ban – это мощный инструмент для защиты серверов от несанкционированного доступа. Он автоматически анализирует логи служб (например, sshd) и блокирует IP-адреса, с которых происходит слишком много неудачных попыток входа за короткий промежуток времени. Это помогает эффективно предотвращать brute-force атаки и повысить безопасность системы. Fail2ban легко настраивается через конфигурационные файлы, где можно задать параметры времени блокировки, число допустимых попыток и исключить доверенные IP. Благодаря автоматизации процесса защиты, fail2ban широко используется на серверах Linux для минимизации рисков взлома.
Полностью удалить старый fail2ban(если есть):
sudo systemctl stop fail2ban
sudo systemctl disable fail2ban
sudo apt-get purge fail2ban
sudo rm -rf /etc/fail2ban
sudo rm -rf /var/log/fail2ban.log
sudo apt-get autoremove
Установки последней версии fail2ban из GitHub:
sudo apt-get update
sudo apt-get install python3 python3-pip python3-systemd -y
cd /tmp
git clone https://github.com/fail2ban/fail2ban.git
cd fail2ban
sudo python3 setup.py install
Проверка версии fail2ban:
fail2ban-server -V
Проверить где находится fail2ban-server после установки из исходников:
which fail2ban-server
Открыть файл службы для systemd:
sudo nano /lib/systemd/system/fail2ban.service
Найти в нем строку с ExecStart и убедиться, что путь к fail2ban-server правильный. Например:
/usr/local/bin/fail2ban-server
Полный Unit службы fail2ban.service с этим путем:
[Unit]
Description=Fail2Ban Service
After=network.target
[Service]
Type=simple
ExecStart=/usr/local/bin/fail2ban-server -xf start
ExecReload=/usr/local/bin/fail2ban-client reload
KillMode=process
Restart=on-failure
[Install]
WantedBy=multi-user.target
Обновляем конфигурацию systemd:
sudo systemctl daemon-reload
Включаем автоматический запуск fail2ban при загрузке системы:
sudo systemctl enable fail2ban
Запускаем сервис fail2ban:
sudo systemctl start fail2ban
Проверяем статус службы:
sudo systemctl status fail2ban
Все эти команды для вставки разом:
sudo systemctl daemon-reload
sudo systemctl enable fail2ban
sudo systemctl start fail2ban
sudo systemctl status fail2ban
Открываем файл конфигурации
sudo nano /etc/fail2ban/jail.local
Вставляем:
[DEFAULT]
ignoreip = 127.0.0.1/8 ::1 Ваш_IP_адрес_сервера
bantime = 1h
findtime = 10m
maxretry = 5
allowipv6 = true
backend = systemd
[sshd]
enabled = true
maxretry = 3
bantime = -1
- ignoreip – IP-адреса, которым бан не применяется (добавляйте сюда свои доверенные адреса и IP сервера).
- bantime – время блокировки в секундах или с указанием единиц (например, 1h). Для вечного бана используйте
-1. - findtime – период времени, за который учитываются неудачные попытки входа, после чего считается превышение лимита.
- maxretry – максимальное количество неудачных попыток входа до блокировки.
В конфиге ваш_IP_адрес_сервера - нужно заменить на реальный IP вашего сервера
Перезапускаем службу для сохранения изменений:
sudo systemctl restart fail2ban
Проверить статус и текущие баны:
sudo fail2ban-client status
Или для конкретного джейла, например sshd:
sudo fail2ban-client status sshd
Вручную забанить IP командой:
sudo fail2ban-client set sshd banip <IP-адрес>
Вручную разбанить IP командой:
sudo fail2ban-client set sshd unbanip IP_АДРЕС
Просмотр истории банов в логах Fail2ban:
sudo grep Ban /var/log/fail2ban.log
Для просмотра в реальном времени новых банов:
sudo tail -f /var/log/fail2ban.log | grep Ban
Общее число банов (всех записей «Ban»):
grep "Ban" /var/log/fail2ban.log | wc -l
Ротация логов
Ротация логов – это процесс автоматического архивирования и очистки лог-файлов, чтобы они не занимали слишком много места на диске. Когда лог-файл достигает определённого размера или проходит заданный промежуток времени, система создаёт его копию (архивирует), а исходный файл очищает или заменяет новым пустым файлом. Это помогает сохранить контроль над объёмом хранилища и упрощает управление журналами без потери важных данных.
Конфигурация ротации логов для Fail2ban
Открываем:
nano /etc/logrotate.d/fail2ban
Вставляем:
/var/log/fail2ban.log {
size 10M
missingok
notifempty
copytruncate
create 640 root adm
}
Пояснения к параметрам:
size 10M– ротация произойдёт, когда размер файла достигнет 10 мегабайт;missingok– если файл отсутствует, ошибки не будет;notifempty– если файл пуст, ротация не выполняется;copytruncate– содержимое файла копируется в архив, а оригинал очищается, что важно для служб, которые продолжают писать в файл;create 640 root adm– после ротации создаётся новый файл с правами 640, владельцем root и группой adm.
Ручная проверка по указанной конфигурации:
sudo logrotate -f /etc/logrotate.d/fail2ban